clear all;close all;clc
% x_loc = 0:-5:-355;
x_loc = [0:-5:-175 180:-5:5];
y_loc = [-57,-30,-15,0,15,30,45,60,75];

L_or_R = 1;
soft_hard = 0.2; % this is the soft mask!!!
rad = 0.2;

ifplot = 0;
for Condition = 1:6

    if Condition==1
        tar_index = 13; % target is on the left, -60
        noise_index = 61; % noise on the right, +60; we only need to run the model for +60 to get rid of noise!
    elseif Condition==2
        tar_index = 4; % target is on the left, -15
        noise_index = 70; % noise on the right, +15; we only need to run the model for +60 to get rid of noise!
    elseif Condition==3
        tar_index = 1; % target is on the front center 0,
        noise_index = 72; % noise on the right, +5;
    elseif Condition==4
        tar_index = 56; % target is on the right +85,
        noise_index = 55; % noise on the right, +90;  Very bad, but still need to do it and grade.
    elseif Condition==5
        % % % % % % % tar_index = 58; % target is on the right +75,
        % % % % % % % noise_index = 52; % noise on the right, +105;
        tar_index = 60; % target is on the right +65,
        noise_index = 55; % noise on the right, +90;
    elseif Condition==6
        tar_index = 37; % target is on the back +180,
        noise_index = 38; % noise on the back, +175;
    end


    Elevation = 4; % ear level, 4
    x_loc(tar_index)
    x_loc(noise_index)

    fs = 32.1e3; % this is the one for the 3D3A database
    % out_hart = ncread('Acoustic/Subject1/Subject1_HRIRs.sofa',"Data.IR");
%     out_hart = ncread('Acoustic/Subject15/Subject15_HRIRs.sofa',"Data.IR");
    out_hart = ncread('Acoustic/Subject20/Subject20_HRIRs.sofa',"Data.IR");
    for igroup = 1:8 % 8 groups will make 200 sentences
        igroup
        target = [];
        noise = [];
        randNoise = randperm(25);
        for isent = 1:25
                 if isent<10
            [ori,fs2]=audioread(['Speech_sound\BEL_SR\BEL_SR0' num2str(igroup) '0' num2str(isent) '.wav']);
        else
            [ori,fs2]=audioread(['Speech_sound\BEL_SR\BEL_SR0' num2str(igroup) num2str(isent) '.wav']);
        end
        target = [target;resample(ori,fs,fs2)];

        if randNoise(isent)<10
            [BB,fs2]=audioread(['Speech_sound\BEL_SR\BEL_SR0' num2str(igroup) '0' num2str(randNoise(isent)) '.wav']);
        else
            [BB,fs2]=audioread(['Speech_sound\BEL_SR\BEL_SR0' num2str(igroup) num2str(randNoise(isent)) '.wav']);
        end
        noise = [noise; resample(BB,38e3,fs2)];
%         noise = [noise; BB];
        end
%         noise = [noise; BB];
        noise = [noise; resample(BB,38e3,fs2)];
        noise_reversed = flipud(noise);

        % add spatial properties
        %1))) target
        Index = (Elevation - 1)*72+tar_index;%
        h_l = squeeze(out_hart(:,1,Index)); % Left HRIRs
        h_r = squeeze(out_hart(:,2,Index)); % Right HRIRs
        new_tar(:,1) = conv(target,h_l,'same');
        new_tar(:,2) = conv(target,h_r,'same');
        % figure;
        % subplot(221)
        % plot(h_l)
        % size(h_l)

        fsig = (1:length(h_l))./length(h_l).*fs;
        both_fft = fft(h_l);
        subplot(222);plot(fsig,abs(both_fft))
        xlim([0 fs/2])

        %2))) noise
        Index = (Elevation - 1)*72+noise_index;%
        h_l = squeeze(out_hart(:,1,Index)); % Left HRIRs
        h_r = squeeze(out_hart(:,2,Index)); % Right HRIRs
        new_noise(:,1) = conv(noise_reversed,h_l,'same');
        new_noise(:,2) = conv(noise_reversed,h_r,'same');
        if igroup < 5
            Combined_dual = (new_tar+new_noise(1:length(target),:))./2; %0dB SNR
        else
            Combined_dual = (new_tar+0.7*new_noise(1:length(target),:))./2; %3dB SNR
        end
        Combined_mono = sum(Combined_dual,2);
        % sound(Combined_mono(1:round(fs*4),:),fs) % play out the original noisy sound
        % pause(3)

        % ======== Processing
        % only do the noise
        % ifplot=0;
        if igroup==1
            % ifplot = 0;
            out_model=f_get_BB_model(h_l,h_r,ifplot,L_or_R);
        end
        f1=1;icond=1;
        out=f_segregation(out_model.F_centers,Combined_dual,ifplot,L_or_R,soft_hard,rad,f1,icond,0);
        % out.freqs(1:200)
        processed_sound = out.reconstructed;
        % sound(processed_sound(1:round(fs*4),:),fs) % play out the processed sound
        % pause(3)
        % audiowrite(['soft_sound\saved_Processed_TargetL_Group' num2str(igroup) '_Cond' num2str(Condition) '.wav'],processed_sound,fs)
        audiowrite(['New_soft_sound_sub3\saved_Processed_TargetL_Group' num2str(igroup) '_Cond' num2str(Condition) '.wav'],processed_sound,fs)
        clear new_noise new_tar

        % pause
    end
end
